import { ApiError } from "../api/base"
import { ERROR_CODES } from "../api/codes"
import { saveCallAsync } from "../utils/utils"

export default {
	data(){
		return {
			isApiSending: false
		}
	},
	methods: {
		$showToast(msg, icon='Error'){
			console.log("showtoast")
			uni.showToast({
				title: msg,
				icon,
				duration: 3000
			})
		},
		/**
		 * 此方法在发起请求时，会避免重复请求，适合用于当连点按钮处理不当等原因，导致同一个请求被发出多次的场景
		 * 当请求完成时，会根据请求结果返回成功，或弹出Toast窗口提示错误
		 */
		async $sendOrToast(apiFunc, ...params){
			if(this.isApiSending)return
		
			this.isApiSending = true
			const [err, resp] = await saveCallAsync(apiFunc, null, ...datas)
			this.isApiSending = false
			if(!!err){
				this.$showToast(err instanceof Error ? err.message : err, 'error')
				if(err instanceof Error || err instanceof ApiError){
					throw err
				}else{
					throw new ApiError(ERROR_CODES.FAIL, err)
				}
			}
			return resp
		}
	}
}